package org.wangnian.demo02_config_file.config;

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;

/**
 * 在项目中使用 @PropertySource 注解来加载 yml 文件，结果启动直接报错，
 * 原因是 @PropertySource 不支持直接解析 yml 文件，只能解析 properties 文件。
 *
 * 三种方法：
 *      1. 自定义环境处理类，就像 自定义 MyEnvironmentPostProcessor 一样
 *      2. 创建一个读取 yml 文件的配置类，就像下面这样
 *      3. 重写 DefaultPropertySourceFactory 使 @PropertySource 注解支持 yml 文件
 */
//@Configuration
public class ConfigYaml {

    /**
     * 加载 YML 格式自定义配置文件
     */
    @Bean
    public static PropertySourcesPlaceholderConfigurer properties() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource("blog.yml"));
        configurer.setProperties(yaml.getObject());
        return configurer;
    }
}
